iT邦幫忙

2022 iThome 鐵人賽

DAY 14
1
Software Development

ASP.NET Core 30 天旅程系列 第 14

[Day14]- EF Core Code First

  • 分享至 

  • xImage
  •  

EF Core 基本介紹

Entity Framework (EF) Core 是一種資料存取技術,EF Core 是物件關聯對應 (ORM) 框架,以下為它的特性

  • 輕量型
  • 可擴充
  • 開源
  • 跨平台

dotnet ef 必須安裝為全域。

dotnet tool install --global dotnet-ef

建立新專案

dotnet new console -o EFSample
cd EFSample

資料庫提供者,用來與資料庫溝通(其他資料庫提供者)

dotnet add package Microsoft.EntityFrameworkCore.Sqlite

安裝最新的 Microsoft.EntityFrameworkCore.Design 套件

dotnet add package Microsoft.EntityFrameworkCore.Design

建立模型

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public string DbPath { get; }

    public BloggingContext()
    {
        var folder = Environment.SpecialFolder.LocalApplicationData;
        var path = Environment.GetFolderPath(folder);
        DbPath = System.IO.Path.Join(path, "blogging.db");
    }

    // The following configures EF to create a Sqlite database file in the
    // special "local" folder for your platform.
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseSqlite($"Data Source={DbPath}");
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; } = new();
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

建立資料庫

dotnet ef migrations add InitialCreate
dotnet ef database update

建立、讀取、更新 & 刪除

Program.cs

using System;
using System.Linq;

using var db = new BloggingContext();

// 這個資料庫需要在建置前被建立  
Console.WriteLine($"Database path: {db.DbPath}.");

// 建立
Console.WriteLine("建立一個新的 blog");
db.Add(new Blog { Url = "https://ithelp.ithome.com.tw/notifications" });
db.SaveChanges();

// 讀取
Console.WriteLine("查詢一個 blog");
var blog = db.Blogs
    .OrderBy(b => b.BlogId)
    .First();

// 更新
Console.WriteLine("更新 blog and 加一個  post");
blog.Url = "https://devblogs.microsoft.com/dotnet";
blog.Posts.Add(
    new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });
db.SaveChanges();

// 刪除
Console.WriteLine("刪除 blog");
db.Remove(blog);
db.SaveChanges();

執行

dotnet run

https://ithelp.ithome.com.tw/upload/images/20220930/20152200PZINWuQz4N.png


參考資料

Entity Framework 文件


上一篇
[Day13]- ASP.NET Core Identity(2)
下一篇
[Day15]- EF Core DB First
系列文
ASP.NET Core 30 天旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言